package com.itheima.thread.blockingqueue.demo01;

import java.util.concurrent.ArrayBlockingQueue;

/**
 * 演示阻塞队列的基本使用
 */
public class BlockingQueueDemo01 {

    public static void main(String[] args) throws InterruptedException {

        // 创建对象
        /**
         * BlockingQueue是一个接口，那么接口我们不能直接new
         * ArrayBlockingQueue:    基于数组实现的有界阻塞队列，有界指的是队列有大小限制
         * LinkedBlockingQueue:   基于链表实现的无界阻塞队列，并不是绝对的无界(容量：Integer.MAX_VALUE)
         *
         * public ArrayBlockingQueue(int capacity)： capacity表示的就是这个阻塞队列容量
         */
        ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<String>(2) ;  // 泛型表示的含义就是这个阻塞队列中可以存储的元素类型

        // 添加元素
        // void put(E e) throws InterruptedException;			// 存数据
        arrayBlockingQueue.put("hello");
        arrayBlockingQueue.put("world");
        // arrayBlockingQueue.put("java");                     // 产生了阻塞

        // 获取元素
        // System.out.println(arrayBlockingQueue);
        // E take() throws InterruptedException;				// 取出数据，并移除
        String take = arrayBlockingQueue.take();
        System.out.println(take);

        take = arrayBlockingQueue.take();
        System.out.println(take);

        System.out.println("------------------------------------");

        take = arrayBlockingQueue.take();
        System.out.println(take);

    }

}
